package unipi.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import unipi.database.ErrorCodes;
import unipi.database.User;
import unipi.helpers.HTMLPages;
import unipi.helpers.LoginCookie;
import unipi.helpers.Table;

public class ManageRequests extends HttpServlet
{
	private static final long serialVersionUID = 1L;
	
	public ManageRequests()
	{
		super();
	}
	
	public void init() throws ServletException
	{
		
	
	}
	
	private String getPage(String uid, String message)
	{
		String content = "<h1>Αιτήσεις Χρηστών</h1>";
		
		List<List<String>> userReqs = User.getUserRequestData(uid);
		
		if(userReqs == null || userReqs.size() == 0)
		{
			content += "Δεν υπάρχουν χρήστες προς έγκριση.";
		}
		else
		{		
			content += "<form method=\"post\" action=\"ManageRequests\">";
			
			List<String> coltitles = new ArrayList<String>();
			coltitles.add("Επιλογή");
			coltitles.add("Όνομα");
			coltitles.add("Επώνυμο");
			coltitles.add("Email");
			coltitles.add("Όνομα Χρήστη");
			coltitles.add("Τμήμα");
			
			Table reqTable = new Table(coltitles);			
			
			boolean even = false;
			for(List<String> row : userReqs)
			{
				String id = row.get(0);
				row.set(0, "<input type=\"checkbox\" name=\"selection\" value = \"" + id + "\" />");
				
				reqTable.addRow(row, even);		
				even = !even;
			}
					
			content += reqTable.getHTML() + "<br/><div  class=\"right\"> " +
					"<input class=\"longbutton\" type=\"submit\" name=\"btnsub\" value=\"Αποδοχή\" />	&nbsp;	&nbsp; " +
					"<input class=\"longbutton\" type=\"submit\" name=\"btnsub\" value=\"Απόρριψη\" /> " +
					"</div></form><br />" + message;
		}				
		
		return HTMLPages.getGeneralPage(content, uid);		
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		if(!LoginCookie.authCookie(request))
			response.sendRedirect("Login");
		else
		{
			request.setCharacterEncoding("UTF-8");
			
			String[] userIDs = request.getParameterValues("selection");
			String button = request.getParameter("btnsub");
	
			String message = "";
			
			if(userIDs != null)
			{
				if(button.equals("Αποδοχή"))
				{
					if(User.approveUsers(userIDs) != ErrorCodes.OK)
						message = "Οι επιλεγμένοι χρήστες δεν μπόρεσαν να εγκριθούν από το σύστημα. Ίσως υπάρχει πρόβλημα " +
								  "σύνδεσης με την βάση.";	
					else
						message = "Οι επιλεγμένοι χρήστες εγκρίθηκαν με επιτυχία.";
				}
				else
				{
					if(User.hardDelete(userIDs) != ErrorCodes.OK)
						message = "Οι επιλεγμένοι χρήστες δεν μπόρεσαν να απορριφθούν από το σύστημα. Ίσως υπάρχει πρόβλημα " +
								  "σύνδεσης με την βάση.";	
					else						
						message = "Οι επιλεγμένοι χρήστες απορρίφθηκαν με επιτυχία.";
				}
			}
			
	
			String uid = LoginCookie.Get(request)[0];
			
			response.setContentType("text/html; charset=UTF-8");	
			PrintWriter out = response.getWriter();

			
			out.println(getPage(uid, message));			
			out.close();			
		}

	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{		
		if(!LoginCookie.authCookie(request))
			response.sendRedirect("Login");
		else
		{
			String uid = LoginCookie.Get(request)[0];
			
			response.setContentType("text/html; charset=UTF-8");	
			PrintWriter out = response.getWriter();
			
			out.println(getPage(uid, ""));
			
			out.close();
			
		}
		

	}

}
